ECS Fargate から 別 VPC 上にある EFS をマウントしてみました

ECS Fargate から 別 VPC 上にある EFS をマウントしてみました

Clock Icon2024.08.13

はじめに

現時点(2024/8/13)において、ECS Fargate のタスク定義で異なる VPC 上にある EFS をマウント対象にしても起動に失敗します。
これは Fargate が EFS のマウント方法としてファイルシステム ID 指定方式しかサポートしておらず、対象の EFS が別 VPC 上に存在する場合は名前解決が正常に実施できないためです。
しかしながら、以下の Github Issues に Route53 Resolver を利用することで上記の名前解決問題が解消でき、EFS をマウントすることが可能という旨のコメントをしている方がいたので、実際に試してみたいと思います。

You can use an outbound resolver with a rule to forward volumeid.efs.region.amazonaws.com to an inbound resolver in the account where the EFS Volume resides.

https://github.com/aws/containers-roadmap/issues/901

検証環境構成図

検証環境の構成は以下の通りです。
VPC Peering で相互に通信可能な状態にした上で、EFS 用 VPC には Route53 のインバウンド Resolver エンドポイントを、Fargate 用 VPC にはアウトバウンド Resolver エンドポイントをそれぞれ作成しています。

efs

事前確認

まずはじめに、Route 53 Resolver を設定しない状態で別 VPC 上の EFS のマウントが出来ないことを確認しておきます。
Fargate タスクのボリューム設定で作成した EFS を指定します。

2024-08-13_11h56_29

その後、タスクを立ち上げたところ、以下のエラーが出て起動に失敗しました。
EFS の DNS 名が解決できなかった旨のメッセージが出力されています。

ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: Failed to resolve "fs-0f74cf40673b55827.efs.ap-northeast-1.amazonaws.com" - check that your file system ID is correct, and ensure that the VPC has an EFS mount target for this file system ID.

2024-08-13_13h09_20

ボリューム設定から一時的に EFS のマウント設定を外して Fargate のタスクを起動後、ECS Exec を利用してコンテナに接続し、nslookup で EFS の DNS 名を引いてみます。

2024-08-13_11h06_31

Fargate から EFS の名前解決が出来ていない状態であることを確認しました。
※なお、デフォルトでは nslookup コマンドは利用できない状態なので、コンテナ接続後に "apt-get update && apt-get install -y dnsutils" を実行して必要なパッケージをインストールしています。

Resolver エンドポイント設定

Fargate からの名前解決を可能にするため、アウトバウンド用の Resolver エンドポイントに以下の様な転送ルールを作成しました。
EFS のドメインを解決する際に、EFS が存在する VPC 上に構築したインバウンド用の Resolver エンドポイントに DNS クエリを転送するといった設定にしています。

2024-08-13_11h26_08

設定確認

上記転送ルールにより、EFS の名前解決に必要な準備が整いましたので、改めて ECS のタスク起動を実施します。

2024-08-13_13h43_58

EFS をマウントした状態で無事にタスクの起動が成功しました。

ECS Exec でコンテナに接続し EFS の名前解決が出来ていることも確認します。

2024-08-13_13h49_53

IP アドレスが引けていることを確認しました。

終わりに

無事に Fargate から別 VPC 上にある EFS をマウントすることが出来ました。
なお、冒頭で触れた Github Issues のコメント欄にも記載がありますが、Route53 Resolver がそれなりに料金のかかるリソースであることがこの構成の注意点です。[1]
事前に費用対効果は考慮した上で利用をご検討ください。
※ Route53 Resolver エンドポイントは ENI ごとに 0.125 USD/時間 かかりますが、この構成を取る場合最低 4 つの ENI を作成する必要があるため、0.125 × 24(時間) × 30(日) で月額 360 ドルの費用が発生する計算になります

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

脚注
  1. Amazon Route 53 料金表 ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.